/*
 * OyentesObj.java	
 *
 * Copyright 2009 Universidad Francisco de Paula Santander (UFPS).
 * Todos los Derechos Reservados.
 * Creado el 05/10/09, 10:05:38 AM
 */

package com.ufps.cuatro.modelo.representacion;

import com.ufps.cuatro.modelo.representacion.componente.Componente;
import java.util.ArrayList;

import com.ufps.cuatro.util.base.OyenteBase;

/**
 * <i><b>Oyente:</b></i> Encapsula los Oyentes Registrados a un Objecto
 * de la Interfaz Gráfica.
 *
 * @param <T> Referencia al Componente que contiene los Oyentes registrados.
 * @author  Carlos A. Torres C. - Dolly E. Guerrero. <https://code.google.com/p/tesis4dor/>
 * @version 1.0 05/10/09
 * @see Serializable
 * @see OyenteBase
 */
public class Oyente<T extends Componente> extends OyenteBase{
    private static final long serialVersionUID = -6474515816490897030L;

    private T objComponente;
    private ArrayList<EventoOyente> objEventos;
    private ArrayList<MetodoOyente> objMetodos;
    

    /**
     * Constructor por Defecto.
     */
    public Oyente() {
        objEventos = new ArrayList<EventoOyente>();
        objMetodos = new ArrayList<MetodoOyente>();
    }

    /**
     * Devuelve la Referencia al Componente.
     * @return Referencia al Componente.
     */
    public T getObjComponente() {
        return objComponente;
    }

    /**
     * Establece la Referencia al Componente.
     * @param objComponente Referencia al Componente.
     */
    public void setObjComponente(T objComponente) {
        this.objComponente = objComponente;
    }

    /**
     * Devuelve la Colección de Eventos asociados al Oyente.
     * @return Colección de Eventos asociados al Oyente.
     */
    public ArrayList<EventoOyente> getObjEventos() {
        return objEventos;
    }

    /**
     * Establece la Colección de Eventos asociados al Oyente.
     * @param objEventos Colección de Eventos asociados al Oyente.
     */
    public void setObjEventos(ArrayList<EventoOyente> objEventos) {
        this.objEventos = objEventos;
    }   

    /**
     * Devuelve la Colección de Métodos asociados al Oyente.
     * @return Colección de Métodos asociados al Oyente.
     */
    public ArrayList<MetodoOyente> getObjMetodos() {
        return objMetodos;
    }

    /**
     * Establece la Colección de Métodos asociados al Oyente.
     * @param objMetodos Colección de Métodos asociados al Oyente.
     */
    public void setObjMetodos(ArrayList<MetodoOyente> objMetodos) {
        this.objMetodos = objMetodos;
    }    

    /**
     * Devuelve la definición del EventoOyente.
     * @param objEvento Referencia al EventoOyente que devolverá la Definición.
     * @return Cadena que describe la definición del EventoOyente.
     */
    public String getDefinicion(EventoOyente objEvento){
        try{
            return "publi void " + objEvento.getStrNombre()
                    + "(" + getStrAccion() + " " + getStrVar() + ")";
        }catch(java.lang.NullPointerException ex){}
        return "";
    }

    @Override
    public String getDefinicion(int i){
        try{
            return this.getDefinicion(this.objEventos.get(i));
        }catch(java.lang.IndexOutOfBoundsException ex){}
        return "";
    }

    @Override
    public String toString() {
        return this.strNombre;
    }
    
    @Override
    public int compareTo(Object o) {
        try{
            Oyente obj = (Oyente) o;
            if(this.id > obj.id)
                return 1;
            else if(this.id < obj.id)
                return -1;
            else
                return 0;
        } catch(java.lang.NullPointerException ex){}
        return 0;
    }   
}
